attribute vec3 a_posL;
attribute vec2 a_uv;
attribute vec3 a_tangentL;
attribute vec3 a_bitangentL;
attribute vec3 a_normalL;

uniform mat4 u_mvp;
uniform mat4 u_W;

varying vec3 v_tangentW;
varying vec3 v_bitangentW;
varying vec3 v_normalW;
varying vec2 v_uv;
void main()
{
    gl_Position = u_mvp * vec4(a_posL, 1.0);
    
    v_normalW = normalize((u_W * vec4(a_normalL, 0.0)).xyz);
    
    v_tangentW = normalize((u_W * vec4(a_tangentL, 0.0)).xyz);
    
    v_bitangentW = normalize((u_W * vec4(a_bitangentL, 0.0)).xyz);
    
    v_uv = a_uv;
}